{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Regressão Linear Simples - Trabalho\n",
    "\n",
    "## Estudo de caso: Seguro de automóvel sueco\n",
    "\n",
    "Agora, sabemos como implementar um modelo de regressão linear simples. Vamos aplicá-lo ao conjunto de dados do seguro de automóveis sueco. Esta seção assume que você baixou o conjunto de dados para o arquivo insurance.csv, o qual está disponível no notebook respectivo.\n",
    "\n",
    "O conjunto de dados envolve a previsão do pagamento total de todas as reclamações em milhares de Kronor sueco, dado o número total de reclamações. É um dataset composto por 63 observações com 1 variável de entrada e 1 variável de saída. Os nomes das variáveis são os seguintes:\n",
    "\n",
    "1. Número de reivindicações.\n",
    "2. Pagamento total para todas as reclamações em milhares de Kronor sueco.\n",
    "\n",
    "Voce deve adicionar algumas funções acessórias à regressão linear simples. Especificamente, uma função para carregar o arquivo CSV chamado *load_csv ()*, uma função para converter um conjunto de dados carregado para números chamado *str_column_to_float ()*, uma função para avaliar um algoritmo usando um conjunto de treino e teste chamado *split_train_split ()*, a função para calcular RMSE chamado *rmse_metric ()* e uma função para avaliar um algoritmo chamado *evaluate_algorithm()*.\n",
    "\n",
    "Utilize um conjunto de dados de treinamento de 60% dos dados para preparar o modelo. As previsões devem ser feitas nos restantes 40%. \n",
    "\n",
    "Compare a performabce do seu algoritmo com o algoritmo baseline, o qual utiliza a média dos pagamentos realizados para realizar a predição ( a média é 72,251 mil Kronor).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Definição das Funções"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Importando Bibliotecas\n",
    "import csv\n",
    "import matplotlib.pyplot as plt\n",
    "from math import sqrt\n",
    "from random import randrange"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Definição da função que transforma um conjunto de dados inteiro em float\n",
    "def str_column_to_float(data):\n",
    "    newData = []\n",
    "    for lines in data:\n",
    "        aux = [float(x) for x in lines]\n",
    "        newData.append(aux)\n",
    "    return newData\n",
    "\n",
    "# Definição da função que carrega o arquivo .csv\n",
    "def load_csv(filename):\n",
    "    lines = csv.reader(open(filename + \".csv\", \"r\"))\n",
    "    data = list(lines)\n",
    "    return str_column_to_float(data)\n",
    "\n",
    "# Função responsável por separar o Conjunto de Treino de Conjunto de Teste\n",
    "def split_train_test(data, test_size=0.4):\n",
    "    dataTrain = list(data)\n",
    "    dataTest = []\n",
    "    size = int(len(dataTrain)*test_size)\n",
    "    for _ in range(size):\n",
    "        idx = randrange(len(dataTrain))\n",
    "        dataTest.append(dataTrain.pop(idx))\n",
    "    return [dataTrain, dataTest]\n",
    "\n",
    "# Definição da função que calcula média de um conjunto de valores\n",
    "def mean(values):\n",
    "    return sum(values)/len(values)\n",
    "\n",
    "# Definição da função que calcula a variância de um conjunto de valores\n",
    "def variance(values, mean):\n",
    "    return sum([(x-mean)**2 for x in values])\n",
    "\n",
    "# Calcula a covariância entre duas variáveis X e Y\n",
    "def covariance(x, mean_x, y, mean_y):\n",
    "    covar = 0.0\n",
    "    for i in range(len(x)):\n",
    "        covar += (x[i] - mean_x) * (y[i] - mean_y)\n",
    "    return covar\n",
    "\n",
    "# Calcula os coeficientes da regressão de um data conjunto de dados\n",
    "def coefficients(dataset):\n",
    "    x = [row[0] for row in dataset]\n",
    "    y = [row[1] for row in dataset]\n",
    "    x_mean, y_mean = mean(x), mean(y)\n",
    "    b1 = covariance(x, x_mean, y, y_mean) / variance(x, x_mean)\n",
    "    b0 = y_mean - b1 * x_mean\n",
    "    return [b0, b1]\n",
    "\n",
    "# Realiza uma Regressão Linear, obtendo os parâmetros por um conjunto de treino\n",
    "# e realizando predições sobre um conjunto de teste\n",
    "def simple_linear_regression(train, test):\n",
    "    predictions = list()\n",
    "    b0, b1 = coefficients(train)\n",
    "    for row in test:\n",
    "        ypred = b0 + b1 * row[0]\n",
    "        predictions.append(ypred)\n",
    "    return predictions\n",
    "\n",
    "# Calcula o valor da métrica RMSE (Root Mean Squared Error)\n",
    "def rmse_metric(actual, predicted):\n",
    "    sum_error = 0.0\n",
    "    for i in range(len(actual)):\n",
    "        prediction_error = predicted[i] - actual[i]\n",
    "        sum_error += (prediction_error ** 2)\n",
    "    mean_error = sum_error / float(len(actual))\n",
    "    return sqrt(mean_error)\n",
    "\n",
    "# Avalia a qualidade de um determinado algoritmo sobre um Dataset utilizando\n",
    "# o RMSE como métrica\n",
    "def evaluate_algorithm(train_set, test_set, algorithm):\n",
    "    predicted = algorithm(train_set, test_set)\n",
    "    actual = [row[-1] for row in test_set]\n",
    "    rmse = rmse_metric(actual, predicted)\n",
    "    return rmse\n",
    "\n",
    "# Baseline: assume que o valor de resposta é sempre a média dos preços\n",
    "def baseline(train_set, test_set):\n",
    "    pays = [row[-1] for row in train_set]\n",
    "    meanValue = mean(pays)\n",
    "    predictions = [meanValue for i in range(len(test_set))]\n",
    "    return predictions\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Utilização da Regressão Linear e Avaliação do Algoritmo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A Regressão Linear Simples obteve os coeficientes: alfa = 15.84 e beta = 3.47\n",
      "O erro RMSE desse algoritmo é 33.14\n",
      "O erro RMSE para o baseline (média dos pagamentos) é 89.88\n",
      "\n",
      "Primeiras 10 predições:\n",
      "Y real: 48.80 \t| Y previsto: 40.16 \t | Y baseline: 97.67\n",
      "Y real: 40.30 \t| Y previsto: 33.21 \t | Y baseline: 97.67\n",
      "Y real: 194.50 \t| Y previsto: 120.08 \t | Y baseline: 97.67\n",
      "Y real: 87.40 \t| Y previsto: 47.11 \t | Y baseline: 97.67\n",
      "Y real: 77.50 \t| Y previsto: 40.16 \t | Y baseline: 97.67\n",
      "Y real: 142.10 \t| Y previsto: 74.91 \t | Y baseline: 97.67\n",
      "Y real: 14.60 \t| Y previsto: 36.69 \t | Y baseline: 97.67\n",
      "Y real: 39.60 \t| Y previsto: 95.75 \t | Y baseline: 97.67\n",
      "Y real: 137.90 \t| Y previsto: 99.23 \t | Y baseline: 97.67\n",
      "Y real: 55.60 \t| Y previsto: 43.63 \t | Y baseline: 97.67\n"
     ]
    }
   ],
   "source": [
    "data = load_csv(\"insurance\")\n",
    "[trainData, testData] = split_train_test(data, test_size=0.4)\n",
    "\n",
    "coef = coefficients(trainData)\n",
    "predRegre = simple_linear_regression(trainData, testData)\n",
    "predBase = baseline(trainData, testData)\n",
    "\n",
    "avalRegre = evaluate_algorithm(trainData, testData, simple_linear_regression)\n",
    "avalBase = evaluate_algorithm(trainData, testData, baseline)\n",
    "\n",
    "print(\"A Regressão Linear Simples obteve os coeficientes: alfa = {:.2f} e beta = {:.2f}\".format(coef[0], coef[1]))\n",
    "print(\"O erro RMSE desse algoritmo é {:.2f}\".format(avalRegre))\n",
    "print(\"O erro RMSE para o baseline (média dos pagamentos) é {:.2f}\".format(avalBase))\n",
    "\n",
    "print(\"\\nPrimeiras 10 predições:\")\n",
    "for i in range(10):\n",
    "    print(\"Y real: {:.2f} \\t| Y previsto: {:.2f} \\t | Y baseline: {:.2f}\".format(testData[i][-1], predRegre[i], predBase[i]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Visualização da Regressão Linear"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nyqKJllLq7LKz4e67ravA116DAQOcjkgppbwzf751kRgfz/oXX4RSHlALJE20lFKly8mBxERITbVm\nTH74YacjUkop7yxcCH36QGwsLFhAbiX3ZOXTREspVbLcXOjf35pjZsIEa3kKpZRygyVLoFcvuPxy\nK+E677xSq6akpxAzKYYaz9YgZlIMKekpfg1FE61SHDx4sGBh1IYNGxIVFVWwffr0aa+O8eCDD7Jt\n2zavzzl16lQaNGhAfHw8zZs356abbuKbb74pc785c+awZcsWr8+jVJny8uChh+C99+Bvf4M//cnp\niJSP/NGGAUybNo1ffvmlxPf69etHs2bNaNOmDZdddhn9+/dnz549ZR7zlVde4eTJk17HoJRPPv/c\nmu390kth0SI4//xSq6akp5D0cRI7j+zEYNh5ZCdJHyf5NdnSRKsU559/fsGyDA8//DBDhw4t2K5p\nzyBrjCEvL6/UY7z11ls0b97cp/MmJiayZs0atm3bxrBhw+jVqxc//PDDWffRREv5VV6edYvw7bdh\n9GgYOdLpiFQ5eNOGeeNsiRbAxIkTWbduHVu2bCE2Npbrr7+e7Ozssx5TEy0VMF9+CT16QEyM1avV\noMFZq49aMooT2UUXOT+RfYJRS0b5LaQqk2ilrsmg87ilNBvxCZ3HLSV1TUZAzrN9+3ZatmxJYmIi\nrVq1Yu/evSQlJdG+fXtatWrFc889V1D36quvZv369eTk5BAREcGIESNo06YNnTp1Yv/+/WWeq3v3\n7gwcOJA33ngDgNdff50OHTrQpk0b7rrrLrKysli+fDnz589n6NChBQulllRPKa8YY90ifOMNePJJ\nePpppyOqNgJ9+6LIuVJS6NixI3FxcTzyyCPk5eWRk5PDfffdR2xsLK1bt+bVV1/lgw8+YO3atdx9\n991l9oTVqFGDYcOGUb9+/YL1AktqGydOnMj+/fu55ppr6N69e5F6HTt2LNKGKuWTr7+2VqyIirKS\nrAsvLHOXXUd2+VReHlUi0Updk8HIOelkHM7CABmHsxg5Jz1gydaWLVsYOnQomzZtIioqinHjxvH9\n99+zbt06Fi1aVGRF+3xHjhyhS5curFu3jk6dOjFt2jSvztW2bduC3qq77rqL7777jnXr1nHJJZfw\n9ttvc80113DLLbcwceJE1q5dS0xMTIn1lCqTMfDEEzBlinWr8IUXQMTpqKqFyrh9kW/Dhg3MmzeP\n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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f9968849f28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Separando entrada de saída\n",
    "X_train = [row[0] for row in trainData]; X_test = [row[0] for row in testData]\n",
    "Y_train = [row[1] for row in trainData]; Y_test = [row[1] for row in testData]\n",
    "predTrain = simple_linear_regression(trainData, trainData)\n",
    "predTest = predRegre\n",
    "\n",
    "plt.figure(figsize=[10, 5])\n",
    "\n",
    "plt.subplot(1,2,1); plt.title(\"Dados de Treino\")\n",
    "plt.scatter(X_train, Y_train, label=\"Train Data\")\n",
    "plt.plot(X_train, predTrain, 'r-', label=\"Regression Line\")\n",
    "plt.grid()\n",
    "plt.legend()\n",
    "\n",
    "plt.subplot(1,2,2); plt.title(\"Dados de Teste\")\n",
    "plt.scatter(X_test, Y_test, c=\"green\", label=\"Test Data\")\n",
    "plt.plot(X_test, predTest, 'r-', label=\"Regression Line\")\n",
    "plt.grid()\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
